<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <script>
    // 面向过程
    // 定义学生的对象
    // var std1 = {name: "Bob", score: 89};
    // var std2 = {name: "Mike", score: 98};
    // // 封装一个打印学生成绩的函数
    // function printScore(student) {
    //   console.log("姓名：" + student.name + "成绩：" + student.score);
    // }
    // // 具体调用函数打印出对应成绩
    // printScore(std1);
    // printScore(std2);

    // 面向对象
    // 首先考虑的不是整个流程，而是将一个学生当成一个对象，对象有两个属性存储姓名和成绩，并且对象自己有打印成绩的功能，将所有跟学生有关的属性和行为都封装到对象身上
    // 在这个过程，我们已知会由多个类似的对象，可以利用构造函数的方法先进行封装，然后创建单独的对象
    // 抽象所有的数据行为成一个模板（Class）
    function Student(name,score) {
      this.name = name;
      this.score = score;
      this.printScore = function () {
        console.log("姓名：" + this.name + "成绩：" + this.score);
      };
    }
    // 根据模板创建具体的实例对象（Instance）
    var std1 = new Student("Bob",90);
    var std2 = new Student("Mike",98);
    // 调用实例对象自己的方法
    std1.printScore();
    std2.printScore();
  </script>
</body>
</html>